Day 48 - Selenium & Cookie Click Game


Posted by pei_______ on 2022-05-30

learning from 100 Days of Code: The Complete Python Pro Bootcamp for 2022


Selenium Documentation


導入常用Selenium模組及web driver

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import StaleElementReferenceException
import time

chrome_driver_path = "D:\chrome_driver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver_path)

轉換與關閉控制頁面

# 第一個開啟的頁面
base_window = driver.window_handles[0]

# 第二個開啟的頁面
login_window = driver.window_handles[1]

# 轉換控制頁面
driver.switch_to.window(login_window)
print(driver.title)

# 關閉單一頁面
driver.close()

# 關閉此project中的所有頁面
driver.quit()

以python.org為目標

driver.get("https://www.python.org/")

# 以X-path選擇物件,抓取物件尺寸以及href屬性內容(即連結)
wiki_link = driver.find_element(By.XPATH, '//*[@id="container"]/li[4]/ul/li[9]/a')
print(search_bar.size)
print(link.get_attribute("href"))

# 以CSS_selector選擇物件,抓取表格內容並儲存成dictionary
dates = driver.find_elements(By.CSS_SELECTOR, ".event-widget .menu time")
events = driver.find_elements(By.CSS_SELECTOR, ".event-widget .menu a")
event_dic = {}

for index in range(0, len(dates)):
    event_dic[index] = {'time': dates[index].text, 'name': events[index].text}

print(event_dic)

以wikipedia為目標

driver.get("https://en.wikipedia.org/wiki/Main_Page")

# 以連結文字選擇物件,並自動點擊
Content_portals  = driver.find_element(By.LINK_TEXT, "Content portals")
Content_portals.click()

# 以name選擇物件,自動輸入搜尋文字並送出
search = driver.find_element(By.NAME, "search")
search.send_keys("Python")
search.send_keys(Keys.ENTER)

以(教學用)登入頁面為目標

driver.get("http://secure-retreat-92358.herokuapp.com/")

f_name = driver.find_element(By.NAME, "fName")
l_name = driver.find_element(By.NAME, "lName")
email = driver.find_element(By.NAME, "email")
btn = driver.find_element(By.CLASS_NAME, "btn")

f_name.send_keys("Lee")
l_name.send_keys("Penny")
email.send_keys("example@gmail.com")
btn.send_keys(Keys.ENTER)

Cookie Click Game

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
import time

chrome_driver_path = "D:\chrome_driver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get(url="http://orteil.dashnet.org/experiments/cookie/")


def check_money():
    return int(driver.find_element(By.ID, "money").text)


def print_score():
    print(driver.find_element(By.ID, "cps").text.split()[-1])


def buy_item():
    store_prices = driver.find_elements(By.CSS_SELECTOR, "#store b")
    try:
        for index in range(len(store_prices)-2, -1, -1):
            price = int(store_prices[index].text.split()[-1].replace(",", ""))
            if check_money() >= price:
                store_prices[index].click()
                break
    except StaleElementReferenceException as e:
        print(e)


is_clicking = True

time_out = time.time() + 5 * 60
time_after_5_sec = time.time() + 5

while is_clicking:
    cookie = driver.find_element(By.CSS_SELECTOR, "#cookie")
    cookie.click()

    if time.time() > time_after_5_sec:
        buy_item()
        time_after_5_sec = time.time() + 5

    if time.time() > time_out:
        print_score()
        is_clicking = False

#Python #課堂筆記 #100 Days of Code







Related Posts

JS 展開  (Spread Operator) 以及反向展開 (Rest Parameters)

JS 展開 (Spread Operator) 以及反向展開 (Rest Parameters)

js 實作 2FA 驗證

js 實作 2FA 驗證

【Day06】 Git 版控流程簡易介紹

【Day06】 Git 版控流程簡易介紹


Comments